home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1997 October: Mac OS SDK / Dev.CD Oct 97 SDK1.toast / Development Kits (Disc 1) / Interfaces&Libraries / Universal / Interfaces / AIncludes / DateTimeUtils.a < prev    next >
Encoding:
Text File  |  1997-08-12  |  14.5 KB  |  525 lines  |  [TEXT/MPS ]

  1. ;
  2. ;    File:        DateTimeUtils.a
  3. ;
  4. ;    Contains:    International Date and Time Interfaces (previously in TextUtils)
  5. ;
  6. ;    Version:    Technology:    System 7.5
  7. ;                Release:    Universal Interfaces 3.0.1
  8. ;
  9. ;    Copyright:    © 1994-1997 by Apple Computer, Inc., all rights reserved.
  10. ;
  11. ;    Bugs?:        Please include the the file and version information (from above) with
  12. ;                the problem description.  Developers belonging to one of the Apple
  13. ;                developer programs can submit bug reports to:
  14. ;
  15. ;                    devsupport@apple.com
  16. ;
  17. ;
  18.     IF &TYPE('__DATETIMEUTILS__') = 'UNDEFINED' THEN
  19. __DATETIMEUTILS__ SET 1
  20.  
  21.     IF &TYPE('__CONDITIONALMACROS__') = 'UNDEFINED' THEN
  22.     include 'ConditionalMacros.a'
  23.     ENDIF
  24.     IF &TYPE('__TYPES__') = 'UNDEFINED' THEN
  25.     include 'Types.a'
  26.     ENDIF
  27.  
  28. ;
  29. ;    Here are the current routine names and the translations to the older forms.
  30. ;    Please use the newer forms in all new code and migrate the older names out of existing
  31. ;    code as maintainance permits.
  32. ;    
  33. ;    New Name                    Old Name(s)
  34. ;    
  35. ;    DateString                    IUDatePString IUDateString 
  36. ;    InitDateCache
  37. ;    LongDateString                IULDateString
  38. ;    LongTimeString                IULTimeString
  39. ;    StringToDate                String2Date
  40. ;    StringToTime                                
  41. ;    TimeString                    IUTimeString IUTimePString
  42. ;    LongDateToSeconds            LongDate2Secs
  43. ;    LongSecondsToDate            LongSecs2Date
  44. ;    DateToSeconds                Date2Secs
  45. ;    SecondsToDate                Secs2Date
  46. ;
  47.  
  48.  
  49.  
  50.                                                             ; Toggle results 
  51. toggleUndefined                    EQU        0
  52. toggleOK                        EQU        1
  53. toggleBadField                    EQU        2
  54. toggleBadDelta                    EQU        3
  55. toggleBadChar                    EQU        4
  56. toggleUnknown                    EQU        5
  57. toggleBadNum                    EQU        6
  58. toggleOutOfRange                EQU        7                    ;synonym for toggleErr3
  59. toggleErr3                        EQU        7
  60. toggleErr4                        EQU        8
  61. toggleErr5                        EQU        9
  62.  
  63.                                                             ; Date equates 
  64. smallDateBit                    EQU        31                    ;Restrict valid date/time to range of Time global
  65. togChar12HourBit                EQU        30                    ;If toggling hour by char, accept hours 1..12 only
  66. togCharZCycleBit                EQU        29                    ;Modifier for togChar12HourBit: accept hours 0..11 only
  67. togDelta12HourBit                EQU        28                    ;If toggling hour up/down, restrict to 12-hour range (am/pm)
  68. genCdevRangeBit                    EQU        27                    ;Restrict date/time to range used by genl CDEV
  69. validDateFields                    EQU        -1
  70. maxDateField                    EQU        10
  71.  
  72. eraMask                            EQU        $0001
  73. yearMask                        EQU        $0002
  74. monthMask                        EQU        $0004
  75. dayMask                            EQU        $0008
  76. hourMask                        EQU        $0010
  77. minuteMask                        EQU        $0020
  78. secondMask                        EQU        $0040
  79. dayOfWeekMask                    EQU        $0080
  80. dayOfYearMask                    EQU        $0100
  81. weekOfYearMask                    EQU        $0200
  82. pmMask                            EQU        $0400
  83. dateStdMask                        EQU        $007F                ;default for ValidDate flags and ToggleDate TogglePB.togFlags
  84.  
  85. eraField                        EQU        0
  86. yearField                        EQU        1
  87. monthField                        EQU        2
  88. dayField                        EQU        3
  89. hourField                        EQU        4
  90. minuteField                        EQU        5
  91. secondField                        EQU        6
  92. dayOfWeekField                    EQU        7
  93. dayOfYearField                    EQU        8
  94. weekOfYearField                    EQU        9
  95. pmField                            EQU        10
  96. res1Field                        EQU        11
  97. res2Field                        EQU        12
  98. res3Field                        EQU        13
  99. ; typedef SignedByte                     LongDateField
  100.  
  101.  
  102. shortDate                        EQU        0
  103. longDate                        EQU        1
  104. abbrevDate                        EQU        2
  105. ; typedef SInt8                         DateForm
  106.  
  107.  
  108.                                                             ; StringToDate status values 
  109. fatalDateTime                    EQU        $8000                ; StringToDate and String2Time mask to a fatal error 
  110. longDateFound                    EQU        1                    ; StringToDate mask to long date found 
  111. leftOverChars                    EQU        2                    ; StringToDate & Time mask to warn of left over characters 
  112. sepNotIntlSep                    EQU        4                    ; StringToDate & Time mask to warn of non-standard separators 
  113. fieldOrderNotIntl                EQU        8                    ; StringToDate & Time mask to warn of non-standard field order 
  114. extraneousStrings                EQU        16                    ; StringToDate & Time mask to warn of unparsable strings in text 
  115. tooManySeps                        EQU        32                    ; StringToDate & Time mask to warn of too many separators 
  116. sepNotConsistent                EQU        64                    ; StringToDate & Time mask to warn of inconsistent separators 
  117. tokenErr                        EQU        $8100                ; StringToDate & Time mask for 'tokenizer err encountered' 
  118. cantReadUtilities                EQU        $8200
  119. dateTimeNotFound                EQU        $8400
  120. dateTimeInvalid                    EQU        $8800
  121. ; typedef short                         StringToDateStatus
  122.  
  123. ; typedef short                         String2DateStatus
  124.  
  125. DateCacheRecord            RECORD 0
  126. hidden                     ds.w    256                ; offset: $0 (0)        ;  only for temporary use 
  127. sizeof                     EQU *                    ; size:   $200 (512)
  128.                         ENDR
  129. ; typedef struct DateCacheRecord *        DateCachePtr
  130.  
  131. DateTimeRec                RECORD 0
  132. year                     ds.w    1                ; offset: $0 (0)
  133. month                     ds.w    1                ; offset: $2 (2)
  134. day                         ds.w    1                ; offset: $4 (4)
  135. hour                     ds.w    1                ; offset: $6 (6)
  136. minute                     ds.w    1                ; offset: $8 (8)
  137. second                     ds.w    1                ; offset: $A (10)
  138. dayOfWeek                 ds.w    1                ; offset: $C (12)
  139. sizeof                     EQU *                    ; size:   $E (14)
  140.                         ENDR
  141. LongDateTime            RECORD 0
  142. f                         ds        SInt64
  143. sizeof                     EQU *                    ; size:   $8 (8)
  144.                         ENDR
  145.  
  146.  
  147. LongDateCvt                RECORD 0
  148. c                         ds        SInt64            ; offset: $0 (0)
  149.                          ORG 0
  150. lHigh                     ds.l    1                ; offset: $0 (0)
  151. lLow                     ds.l    1                ; offset: $4 (4)
  152. sizeof                     EQU *                    ; size:   $8 (8)
  153.                         ENDR
  154. LongDateRec                RECORD 0
  155. era                         ds.w    1                ; offset: $0 (0)
  156. year                     ds.w    1                ; offset: $2 (2)
  157. month                     ds.w    1                ; offset: $4 (4)
  158. day                         ds.w    1                ; offset: $6 (6)
  159. hour                     ds.w    1                ; offset: $8 (8)
  160. minute                     ds.w    1                ; offset: $A (10)
  161. second                     ds.w    1                ; offset: $C (12)
  162. dayOfWeek                 ds.w    1                ; offset: $E (14)
  163. dayOfYear                 ds.w    1                ; offset: $10 (16)
  164. weekOfYear                 ds.w    1                ; offset: $12 (18)
  165. pm                         ds.w    1                ; offset: $14 (20)
  166. res1                     ds.w    1                ; offset: $16 (22)
  167. res2                     ds.w    1                ; offset: $18 (24)
  168. res3                     ds.w    1                ; offset: $1A (26)
  169.                          ORG 0
  170. list                     ds.w    14                ; offset: $0 (0)        ; Index by LongDateField!
  171.                          ORG 0
  172. eraAlt                     ds.w    1                ; offset: $0 (0)
  173. oldDate                     ds        DateTimeRec        ; offset: $2 (2)
  174.                          ORG 28
  175. sizeof                     EQU *                    ; size:   $1C (28)
  176.                         ENDR
  177. ; typedef SInt8                         DateDelta
  178.  
  179. TogglePB                RECORD 0
  180. togFlags                 ds.l    1                ; offset: $0 (0)        ; caller normally sets low word to dateStdMask=$7F
  181. amChars                     ds.l    1                ; offset: $4 (4)        ; from 'itl0', but uppercased
  182. pmChars                     ds.l    1                ; offset: $8 (8)        ; from 'itl0', but uppercased
  183. reserved                 ds.l    4                ; offset: $C (12)
  184. sizeof                     EQU *                    ; size:   $1C (28)
  185.                         ENDR
  186. ; typedef short                         ToggleResults
  187.  
  188. ; **************************************************************************************
  189. ; *
  190. ; * The following functions are new names that work on 68k and PowerPC
  191. ; *
  192. ; **************************************************************************************
  193. ;
  194.  
  195.  
  196. ;
  197. ; pascal OSErr InitDateCache(DateCachePtr theCache)
  198. ;
  199.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  200.         Macro
  201.         _InitDateCache
  202.             move.l              #$8204FFF8,-(sp)
  203.             dc.w                $A8B5
  204.         EndM
  205.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  206.         IMPORT_CFM_FUNCTION InitDateCache
  207.     ENDIF
  208.  
  209. ;
  210. ; pascal StringToDateStatus StringToDate(Ptr textPtr, long textLen, DateCachePtr theCache, long *lengthUsed, LongDateRec *dateTime)
  211. ;
  212.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  213.         Macro
  214.         _StringToDate
  215.             move.l              #$8214FFF6,-(sp)
  216.             dc.w                $A8B5
  217.         EndM
  218.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  219.         IMPORT_CFM_FUNCTION StringToDate
  220.     ENDIF
  221.  
  222. ;
  223. ; pascal StringToDateStatus StringToTime(Ptr textPtr, long textLen, DateCachePtr theCache, long *lengthUsed, LongDateRec *dateTime)
  224. ;
  225.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  226.         Macro
  227.         _StringToTime
  228.             move.l              #$8214FFF4,-(sp)
  229.             dc.w                $A8B5
  230.         EndM
  231.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  232.         IMPORT_CFM_FUNCTION StringToTime
  233.     ENDIF
  234.  
  235. ;
  236. ; pascal void IUDateString(long dateTime, DateForm longFlag, Str255 result)
  237. ;
  238.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  239.         Macro
  240.         _IUDateString
  241.             clr.w               -(sp)
  242.             dc.w                $A9ED
  243.         EndM
  244.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  245.         IMPORT_CFM_FUNCTION IUDateString
  246.     ENDIF
  247.  
  248. ;
  249. ; pascal void IUTimeString(long dateTime, Boolean wantSeconds, Str255 result)
  250. ;
  251.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  252.         Macro
  253.         _IUTimeString
  254.             move.w              #$0002,-(sp)
  255.             dc.w                $A9ED
  256.         EndM
  257.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  258.         IMPORT_CFM_FUNCTION IUTimeString
  259.     ENDIF
  260.  
  261. ;
  262. ; pascal void IUDatePString(long dateTime, DateForm longFlag, Str255 result, Handle intlHandle)
  263. ;
  264.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  265.         Macro
  266.         _IUDatePString
  267.             move.w              #$000E,-(sp)
  268.             dc.w                $A9ED
  269.         EndM
  270.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  271.         IMPORT_CFM_FUNCTION IUDatePString
  272.     ENDIF
  273.  
  274. ;
  275. ; pascal void IUTimePString(long dateTime, Boolean wantSeconds, Str255 result, Handle intlHandle)
  276. ;
  277.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  278.         Macro
  279.         _IUTimePString
  280.             move.w              #$0010,-(sp)
  281.             dc.w                $A9ED
  282.         EndM
  283.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  284.         IMPORT_CFM_FUNCTION IUTimePString
  285.     ENDIF
  286.  
  287. ;
  288. ; pascal void IULDateString(LongDateTime *dateTime, DateForm longFlag, Str255 result, Handle intlHandle)
  289. ;
  290.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  291.         Macro
  292.         _IULDateString
  293.             move.w              #$0014,-(sp)
  294.             dc.w                $A9ED
  295.         EndM
  296.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  297.         IMPORT_CFM_FUNCTION IULDateString
  298.     ENDIF
  299.  
  300. ;
  301. ; pascal void IULTimeString(LongDateTime *dateTime, Boolean wantSeconds, Str255 result, Handle intlHandle)
  302. ;
  303.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  304.         Macro
  305.         _IULTimeString
  306.             move.w              #$0016,-(sp)
  307.             dc.w                $A9ED
  308.         EndM
  309.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  310.         IMPORT_CFM_FUNCTION IULTimeString
  311.     ENDIF
  312.  
  313.  
  314. ;
  315. ; pascal void LongDateToSeconds(const LongDateRec *lDate, LongDateTime *lSecs)
  316. ;
  317.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  318.         Macro
  319.         _LongDateToSeconds
  320.             move.l              #$8008FFF2,-(sp)
  321.             dc.w                $A8B5
  322.         EndM
  323.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  324.         IMPORT_CFM_FUNCTION LongDateToSeconds
  325.     ENDIF
  326.  
  327. ;
  328. ; pascal void LongSecondsToDate(const LongDateTime *lSecs, LongDateRec *lDate)
  329. ;
  330.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  331.         Macro
  332.         _LongSecondsToDate
  333.             move.l              #$8008FFF0,-(sp)
  334.             dc.w                $A8B5
  335.         EndM
  336.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  337.         IMPORT_CFM_FUNCTION LongSecondsToDate
  338.     ENDIF
  339.  
  340. ;
  341. ; pascal ToggleResults ToggleDate(LongDateTime *lSecs, LongDateField field, DateDelta delta, short ch, const TogglePB *params)
  342. ;
  343.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  344.         Macro
  345.         _ToggleDate
  346.             move.l              #$820EFFEE,-(sp)
  347.             dc.w                $A8B5
  348.         EndM
  349.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  350.         IMPORT_CFM_FUNCTION ToggleDate
  351.     ENDIF
  352.  
  353. ;
  354. ; pascal short ValidDate(const LongDateRec *vDate, long flags, LongDateTime *newSecs)
  355. ;
  356.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  357.         Macro
  358.         _ValidDate
  359.             move.l              #$820CFFE4,-(sp)
  360.             dc.w                $A8B5
  361.         EndM
  362.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  363.         IMPORT_CFM_FUNCTION ValidDate
  364.     ENDIF
  365.  
  366. ;
  367. ; pascal OSErr ReadDateTime(unsigned long *time)
  368. ;
  369.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  370.         ; parameters:
  371.         ;    time            => A0
  372.         ; returns:
  373.         ;    OSErr           <= D0
  374.         _ReadDateTime:    OPWORD    $A039
  375.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  376.         IMPORT_CFM_FUNCTION ReadDateTime
  377.     ENDIF
  378.  
  379. ;
  380. ; pascal void GetDateTime(unsigned long *secs)
  381. ;
  382.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  383.         ; parameters:
  384.         ;    secs            => A0
  385.         Macro
  386.         _GetDateTime
  387.             move.l              $020C,(A0)
  388.         EndM
  389.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  390.         IMPORT_CFM_FUNCTION GetDateTime
  391.     ENDIF
  392.  
  393. ;
  394. ; pascal OSErr SetDateTime(unsigned long time)
  395. ;
  396.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  397.         ; parameters:
  398.         ;    time            => D0
  399.         ; returns:
  400.         ;    OSErr           <= D0
  401.         _SetDateTime:    OPWORD    $A03A
  402.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  403.         IMPORT_CFM_FUNCTION SetDateTime
  404.     ENDIF
  405.  
  406. ;
  407. ; pascal void SetTime(const DateTimeRec *d)
  408. ;
  409.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  410.         ; parameters:
  411.         ;    d               => A0
  412.         Macro
  413.         _SetTime
  414.             dc.w                $A9C7
  415.             dc.w                $A03A
  416.         EndM
  417.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  418.         IMPORT_CFM_FUNCTION SetTime
  419.     ENDIF
  420.  
  421. ;
  422. ; pascal void GetTime(DateTimeRec *d)
  423. ;
  424.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  425.         ; parameters:
  426.         ;    d               => A0
  427.         Macro
  428.         _GetTime
  429.             move.l              $020C,D0
  430.             dc.w                $A9C6
  431.         EndM
  432.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  433.         IMPORT_CFM_FUNCTION GetTime
  434.     ENDIF
  435.  
  436. ;
  437. ; pascal void DateToSeconds(const DateTimeRec *d, unsigned long *secs)
  438. ;
  439.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  440.         _DateToSeconds:    OPWORD    $A9C7
  441.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  442.         IMPORT_CFM_FUNCTION DateToSeconds
  443.     ENDIF
  444.  
  445. ;
  446. ; pascal void SecondsToDate(unsigned long secs, DateTimeRec *d)
  447. ;
  448.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  449.         ; parameters:
  450.         ;    secs            => D0
  451.         ;    d               => A0
  452.         _SecondsToDate:    OPWORD    $A9C6
  453.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  454.         IMPORT_CFM_FUNCTION SecondsToDate
  455.     ENDIF
  456.  
  457. ; **************************************************************************************
  458. ; *
  459. ; * The following provide direct function prototypes for new names for 68k
  460. ; *
  461. ; **************************************************************************************
  462. ;
  463.  
  464. ;
  465. ; pascal void DateString(long dateTime, DateForm longFlag, Str255 result, Handle intlHandle)
  466. ;
  467.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  468.         Macro
  469.         _DateString
  470.             move.w              #$000E,-(sp)
  471.             dc.w                $A9ED
  472.         EndM
  473.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  474.         IMPORT_CFM_FUNCTION DateString
  475.     ENDIF
  476.  
  477. ;
  478. ; pascal void TimeString(long dateTime, Boolean wantSeconds, Str255 result, Handle intlHandle)
  479. ;
  480.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  481.         Macro
  482.         _TimeString
  483.             move.w              #$0010,-(sp)
  484.             dc.w                $A9ED
  485.         EndM
  486.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  487.         IMPORT_CFM_FUNCTION TimeString
  488.     ENDIF
  489.  
  490. ;
  491. ; pascal void LongDateString(LongDateTime *dateTime, DateForm longFlag, Str255 result, Handle intlHandle)
  492. ;
  493.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  494.         Macro
  495.         _LongDateString
  496.             move.w              #$0014,-(sp)
  497.             dc.w                $A9ED
  498.         EndM
  499.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  500.         IMPORT_CFM_FUNCTION LongDateString
  501.     ENDIF
  502.  
  503. ;
  504. ; pascal void LongTimeString(LongDateTime *dateTime, Boolean wantSeconds, Str255 result, Handle intlHandle)
  505. ;
  506.     IF TARGET_OS_MAC ** TARGET_CPU_68K ** ¬ TARGET_RT_MAC_CFM THEN
  507.         Macro
  508.         _LongTimeString
  509.             move.w              #$0016,-(sp)
  510.             dc.w                $A9ED
  511.         EndM
  512.     ELSEIF TARGET_OS_MAC ** TARGET_RT_MAC_CFM THEN
  513.         IMPORT_CFM_FUNCTION LongTimeString
  514.     ENDIF
  515.  
  516.  
  517.  
  518.  
  519.  
  520.     ENDIF ; __DATETIMEUTILS__ 
  521.  
  522.